/***********************************************************************************
 * 文件名： rhc.h
 * 版本： 3
 * 说明：
 * 		RHC(Resistance heating controller 电阻加热控制器)，通过PWM控制发热电阻获得的电压值来
 *  控制发热，实现按照指定电压、功率、温度进行加热。
 *      目前只支持平均电压。
 *      目前只支持使用电池电压为ADC正极参考电压，采集内部固定参考电压的ADC采集方式。
 * 修改记录：
 * 	2021/04/21: 初版。 刘言。
 *  2021/05/07: 增加空载检测功能。刘言。
 *  2021/06/29: 增加正推ADC模式（模式1）支持。
***********************************************************************************/
#ifndef _RHC_H_
#define _RHC_H_

#include "bsp-rhc_config.h"
//#include "rhc_config.h"

#include "polsys.h"


typedef enum _rhc_ev
{
    RHC_EV_NULL = 0,
    RHC_EV_SHORT_OUT = (1 << 0),       // 短路保护了，已经关闭了输出。
    RHC_EV_NO_BATTERY = (1 << 1),      // 没电保护了，已经关闭了输出。
    RHC_EV_NO_LOAD = (1 << 2),         // 无负载（空载）
    RHC_EV_LOADED = (1 << 3),          // 接入了负载
    _RHC_EV_END
}rhc_ev_t;



typedef enum _rhc_mode
{
    RHC_MODE_AVG_VOLTAGE,
    RHC_MODE_RMS_VOLTAGE,
    RHC_MODE_POWER,
    RHC_MODE_TEMPERATURE
}rhc_mode_t;

typedef enum _rhc_load_status
{
    RHC_LOAD_NULL,
    RHC_NO_LOAD,       // 空载
    RHC_LOADED,     // 恒阻负载
    _RHC_LOAD_END
}rhc_load_status_t;

// 仅仅是为了使用伪函数优化而曝光以下属性

extern u16 _RHC_mTarget;    // 目标值


// APIs

// 外部事件，这些函数由外部模块调用，用来通知本模块事件发生了

// PWM周期的 ON 跳变（开启输出），一般在PWM中断中调用。
void RHC_EvPWMOutON();

#if (_RHC_FULL_ADV > 255)
// AD转换完成，一般在ADC中断中调用
void RHC_EvADCCompleted(u16 adv);
#else
// AD转换完成，一般在ADC中断中调用
void RHC_EvADCCompleted(u8 adv);
#endif

#ifdef POLSYS_LITE
// 间隔10~100ms执行一次
// 任务函数，这个函数必须按照要求定时调用（看作是线程入口）
void RHC_Task();
#endif


// 提供的调用接口

// 初始化
// 内部已经初始化了 PWM 发生器
void RHC_Init();

// 设置控制输出的目标值
// value： 电压(mV)
// 带载状态输出微调
#define RHC_SetTarget(u16_value)    \
{\
    _RHC_mTarget = u16_value + _RHC_TARGET_CPST;\
}
// 空载状态输出微调
#define RHC_SetNoLoadTarget(u16_value)    \
{\
    _RHC_mTarget = u16_value + _RHC_NO_LOAD_TARGET_CPST;\
}
// 预热状态输出微调
#define RHC_SetWarmTarget(u16_value)    \
{\
    _RHC_mTarget = u16_value + _RHC_WARM_TARGET_CPST;\
}

// 开始运作，将会开始按照设定参数输出
void RHC_Start();

// 停止输出，执行后会立即关闭输出
void RHC_Stop();



#endif
